import 'package:dio/dio.dart';
import 'package:gobelieve/common/utils/global.dart';
import 'package:shared_preferences/shared_preferences.dart';

/// 初始化dio
Dio initDio() {
  BaseOptions _baseOptions = BaseOptions(
    baseUrl: "http://47.94.143.28:9919",
  );

  Dio dio = Dio(_baseOptions);

  dio.interceptors
      .add(InterceptorsWrapper(onRequest: (RequestOptions options) async {
    if (G.user.data != null) {
      print("G.user.data.token :${G.user.data.token}");
      options.queryParameters['token'] = G.user.data.token;
    }

    return options;
    // 如果你想完成请求并返回一些自定义数据，可以返回一个`Response`对象或返回`dio.resolve(data)`。
    // 这样请求将会被终止，上层then会被调用，then中返回的数据将是你的自定义数据data.
    //
    // 如果你想终止请求并触发一个错误,你可以返回一个`DioError`对象，或返回`dio.reject(errMsg)`，
    // 这样请求将被中止并触发异常，上层catchError会被调用。
  }, onResponse: (Response response) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    // 在返回响应数据之前做一些预处理
    if (response.data['code'] == 2005) {
      prefs.remove("user"); // 移除缓存的用户
      // token已过期
      G.pushNamed("/login");

      /// 先用再次鉴权替代跳转登陆
      String token;
      var res = await G.req.user.authToken(22222);
      print("auth_token res : $res");
      token = res.data["data"];
      Map<String, dynamic> userTmp = {
        "uid": 22222,
        "appId": G.APP_ID,
        "token": token
      };
      G.user.init(userTmp);

      // /// 先用再次鉴权替代跳转登陆 end
    } else if (response.data['code'] != 0) {
      await G.toast(response.data['msg']);
      response.data = null;
    }
    return response;
  }, onError: (DioError e) async {
    // G.toast(e.message);
    // 当请求失败时做一些预处理
    return e; //continue
  }));

  return dio;
}
